【PHP】メソッド - オブジェクト(インスタンス)の内部処理

【PHP】メソッド - オブジェクト(インスタンス)の内部処理

クラスには“メソッド”と呼ぶ処理を定義できます。

メソッドはクラス内部の関数のようなイメージです。

ここでは、メソッドについて解説します。

検証環境

メソッド

メソッドは“オブジェクトの内部処理”です。

関数のように処理のまとまりをクラスに定義し、任意のタイミングでオブジェクトからその処理(メソッド)を呼び出して実行することができます。

また、オブジェクト指向プログラミングでは『振る舞い』と呼ばれます。

メソッドの定義

メソッドを使うには定義が必要です。

基本構文

class クラス名 {
    アクセス修飾子 function メソッド名( 仮引数1, 仮引数2 ... ) {
        処理
        return 値;
    }
}

クラス定義のブロック内にメソッドを定義します。

先頭にアクセス修飾子を記述し、以降は関数の構文と似ており、引数と戻り値は任意に定義できます。

また、メソッド名が異なれば、複数定義が可能で、異なるクラス同士であれば同じメソッド名でも定義できます。

アクセス修飾子

アクセス修飾子はアクセス権限です。

詳しくは別途解説しますが、publicprotectedprivateの3種類があります。

ここでは、いずれかを指定するということを覚えていただければ問題ありませんが、学習中の方は理解をスムーズに進めるため、“どこからでもアクセス可能”を意味するpublicを使うことをおすすめします。

サンプル

<?php

// 人間クラス
class Person {
    
    ___ih_hl_start
    public function greeting( $hour ) {
        $message = '';
        
        if( 6 <= $hour && $hour < 11 ) {
            $message = "Good morning!\n";
        } else if( 11 <= $hour && $hour < 16 ) {
            $message = "Good afternoon!\n";
        } else {
            $message = "Good evening!\n";
        }
        
        return $message;
    }
    ___ih_hl_end
    
}
 
?>
$ php sample.php
$

6〜18行目はgreetingメソッドの定義です。

greetingメソッドはあいさつ(文字列)を戻り値として返し、その内容は引数$hourの値により変わります。

また、メソッドは関数と同様に定義のみでは実行されません。

メソッドの処理を実行するには“メソッドの呼び出し”が必要です。

メソッドの呼び出し

メソッドの処理を実行するには、関数と同様に“呼び出し”を行います。

基本構文

変数->メソッド名(実引数1, 実引数2 ...)

オブジェクトを記憶する変数にアロー演算子(->)を記述し、その後は関数の呼び出しの構文と同様です。

サンプル

<?php

// 人間クラス
class Person {
    
    public function greeting( $hour ) {
        $message = '';
        
        if( 6 <= $hour && $hour < 11 ) {
            $message = "Good morning!\n";
        } else if( 11 <= $hour && $hour < 16 ) {
            $message = "Good afternoon!\n";
        } else {
            $message = "Good evening!\n";
        }
        
        return $message;
    }
    
}

$person = new Person();

___ih_hl_start
$message = $person->greeting(12);
___ih_hl_end

echo $message;

?>
$ php sample.php
Good afternoon!

24行目の$person->greeting(12)がメソッドの呼び出しです。

Personクラスのオブジェクトを記憶する$persongreetingメソッドをアロー演算子を使って呼び出しています。

また、関数と同様に戻り値を代入演算子で変数に記憶することが可能です。

演習問題

問題1

次の実行結果になる車クラスを扱うプログラムを作成してください。
なお、下記条件を満たすものとします。

  • 車クラスを作成する
  • 車クラスにforwardメソッドを作成する。
    forwardメソッドは『前進します。』を出力
  • 車クラスにbackwardメソッドを作成する。
    backwardメソッドは『後進します。』を出力
  • メソッドを使って実行結果になるように出力する
前進します。
後進します。

問題2

次の実行結果になる家クラスを扱うプログラムを作成してください。
なお、下記条件を満たすものとします。

  • 家クラスを作成する
  • 家クラスにlockメソッドを作成する。
    lockメソッドは『鍵を閉めました。』を出力
  • 車クラスにunlockメソッドを作成する。
    unlockメソッドは『鍵を開けました。』を出力
  • メソッドを使って実行結果になるように出力する
鍵を閉めました。
鍵を開けました。